<!DOCTYPE html>
<html lang="en">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>C++ New Features</title>
<link rel="stylesheet" type="text/css" href="https://gcc.gnu.org/gcc.css" />
</head>

<body>
<h1>Improved C++ Support in GCC 3.0</h1>

<ul>
 <li>Improvements:
 <ul>
  <li>G++ now supports importing member functions from base 
      classes with a using-declaration.</li>
  <li>G++ now enforces access control for nested types.</li>
  <li>In some obscure cases, functions with the same type could have
      the same mangled name.  This bug caused compiler crashes,
      link-time clashes, and debugger crashes.  Fixing this bug
      required breaking ABI compatibility for the functions involved.
      The functions in questions are those whose types involve
      non-type template arguments whose mangled representations
      require more than one digit.</li>
  <li>Certain invalid conversions that were previously accepted will
      now be rejected.  For example, assigning function pointers of
      one type to function pointers of another type now requires a
      cast, whereas previously G++ would sometimes accept the code
      even without the cast.</li>
  </ul>
  </li>

 <li>Removed (no longer supported):
 <ul>
  <li>Support for guiding declarations has been removed.</li>
  <li>Support for assignment to <code>this</code> has been removed.  This idiom
      was used in the very early days of C++, before users were
      allowed to overload <code>operator new</code>; it is no longer allowed by
      the C++ standard.</li>
  <li>Support for signatures, a G++ extension, has been removed.</li>
  <li>G++ previously allowed <code>sizeof (X::Y)</code> where Y was a
      non-static member of X, even if the `sizeof' expression occurred
      outside of a non-static member function of X (or one of its
      derived classes, or a member-initializer for X or one of its
      derived classes.)  This extension has been removed.</li>
  <li>G++ no longer allows you to overload the conditional operator
      (i.e., the <code>?:</code> operator.)</li>
  <li>The "named return value" extension:
	    <blockquote><code>int f () return r { r = 3; }</code></blockquote>
      has been deprecated, and will be removed in a future version of
      G++.</li>
 </ul>
 </li>
</ul>

</body>
</html>
